// util/request.js
import config from "@/static/config.js";

// 封装 uni.request
export const myRequest = (options) => {
  return new Promise((resolve, reject) => {
    // 1. 获取本地存储的 Token（参考手册 第五章 数据缓存）
    const token = uni.getStorageSync("token") || "";

    // 调试信息
    console.log('🚀 API请求:', options.method || "GET", options.url);
    console.log('📝 请求数据:', options.data);
    console.log('🔑 Token存在:', !!token);

    // 2. 发起请求
    uni.request({
      url: config.baseURL + options.url, // 拼接完整 URL
      method: options.method || "GET",
      data: options.data || {},
      header: {
        "Content-Type": "application/json",
        "Authorization": token ? `Bearer ${token}` : "" // 携带 Token（后端 Auth 中间件验证）
      },
      timeout: config.timeout,

      // 3. 响应处理（贴合后端统一响应格式）
      success: (res) => {
        const { code, msg, data } = res.data;
        // 成功：code=200（后端 success 响应默认 code=200）
        if (code === 200) {
          resolve(data);
        } 
        // 错误：Token 过期（401）、参数错误（400）等
        else {
          // 提示错误信息（参考手册 组件 - 提示框）
          uni.showToast({ title: msg || "操作失败", icon: "none" });
          // Token 过期：清除缓存并跳登录页（参考手册 2.7 路由跳转）
          if (code === 401) {
            uni.removeStorageSync("token");
            // 兼容历史键名
            uni.removeStorageSync("user");
            uni.removeStorageSync("userInfo");
            uni.redirectTo({ url: "/pages/login/login" });
          }
          reject(msg);
        }
      },

      // 4. 网络错误（如后端未启动）
      fail: (err) => {
        uni.showToast({ title: "网络错误，请检查后端服务", icon: "none" });
        reject(err);
      }
    });
  });
};